package com.dwy2002.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dwy2002.common.Result;
import com.dwy2002.pojo.dto.users.PermissionDTO;
import com.dwy2002.pojo.dto.users.PermissionPageDTO;
import com.dwy2002.pojo.po.users.Permission;
import com.dwy2002.pojo.vo.users.PermissionVO;

import java.util.List;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2025/04/03
 */
public interface IPermissionService extends IService<Permission> {
    /**
     * 添加权限
     *
     * @param dto 权限 DTO
     * @author 杜伟毅
     * @since 2025/4/3 0003 22:25
     */
    Result<Void> addPermission(PermissionDTO dto);

    /**
     * 删除权限（根据ID删除）
     *
     * @param ids 权限id集合
     * @author 杜伟毅
     * @since 2025/4/3 0003 22:25
     */
    Result<Void> deletePermission(List<String> ids);

    /**
     * 更新权限（根据DTO中的ID更新）
     *
     * @param dto 权限 DTO
     * @author 杜伟毅
     * @since 2025/4/3 0003 22:24
     */
    Result<Void> updatePermission(PermissionDTO dto);

    /**
     * 查询单个权限（根据ID查询）
     *
     * @param id 权限id
     * @author 杜伟毅
     * @since 2025/4/3 0003 22:24
     */
    Result<Permission> getPermissionById(String id);

    /**
     * 分页查询权限列表
     *
     * @param dto 权限分页DTO
     * @author 杜伟毅
     * @since 2025/4/3 0003 22:21
     */
    Result<Page<Permission>> getPermissionPage(PermissionPageDTO dto);

    /**
     * 返回权限标识等级
     *
     * @author 杜伟毅
     * @since 2025/4/4 0004 0:28
     */
    Result<List<String>> getPermLevel();

    /**
     * 根据角色id返回权限代码
     *
     * @param roleId 角色id
     * @return 权限代码集合
     * @author 杜伟毅
     * @since 2025/5/12 0012 21:39
     */
    List<String> getPermCode(String roleId);

    /**
     * 根据角色id返回权限
     *
     * @param roleId 角色id
     * @return 权限集合
     * @author 杜伟毅
     * @since 2025/5/14 0014 23:46
     */
    List<PermissionVO> getPermission(String roleId);

    /**
     * 返回全部权限
     *
     * @author 杜伟毅
     * @since 2025/5/15 0015 0:30
     */
    Result<List<PermissionVO>> getAllPermission();
}
